#ifndef _DevicesPID_H_
#define _DevicesPID_H_


#define PID_P               0.08f
#define PID_I               0.001f
#define PID_D               0.000f

/* 允许最大误差值 */
#define PID_EMAX            15.0f

/* 积分的上、下限 */
#define PID_IMAX            PID_OMAX
#define PID_IMIN            PID_OMIN

/* 输出的上、下限 */
#define PID_OMAX            1.0f
#define PID_OMIN            0.0f


typedef struct{
    float kp, ki, kd;                   /* 比例、积分、微分系数 */
    float integral;                     /* 积分值 */
    float errLast;                      /* 上一个偏差值 */

    float errMax;                       /* 允许最大误差值 */
    float integralMax;                  /* 积分的上限 */
    float integralMin;                  /* 积分的下限 */

    float exportValue;                  /* 输出值 */
    float exportValueMax;               /* 输出的上限 */
    float exportValueMin;               /* 输出的下限 */
}PIDInfoType;


void vPIDDeInit(PIDInfoType *ptypeHandle, float fkp, float fki, float fkd, float fErrorMax, float fIntegralMax, float fIntegralMin, float fExportValueMax, float fExportValueMin);
float fPIDLocation(PIDInfoType *pData, float fSetValue, float fActualValue);


#endif
